from django.db import models
from django.contrib.auth.models import AbstractUser, UserManager as _UserManager
# UserManager as _UserManager 把UserManager重命名为_UserManager


# Create your models here.
class UserManager(_UserManager):
    """
    define user manager for modifing 'no need email'
    when 'python manager.py createsuperuser '
    """
    # 重写 继承于父类中 的方法 super函数重新调用父类中的方法
    def create_superuser(self, username, password, email=None, **extra_fields):
        super(UserManager, self).create_superuser(username=username,
                                                  password=password, email=email, **extra_fields)
# super(UserManager, self)) 首先找到UserManager的父类(就是类 _UserManager)
# 然后把类UserManager的对象转换为类_UserManager的对象

class Users(AbstractUser):
    # django的auth中的User类也是继承的AbstractUser这个父类
    """add mobile、email_active fields to Django users models."""
    objects = UserManager() # 实例化这个是为了能让我们想像其他模型类一样
    # 通过 模型类.object.all() 来使用方法

    # A list of the field names that will be prompted for
    # when creating a user via the createsuperuser management command.
    REQUIRED_FIELDS = ['mobile']
    # 把父类中 REQUIRED_FIELDS 字段的赋值更改为现在的这个赋值
    # 通过createSuperUser管理命令创建用户时将提示输入的字段名列表

    # help_text在api接口文档中会用到
    # verbose_name在admin站点中会用到
    mobile = models.CharField(max_length=11, unique=True, verbose_name="手机号", help_text='手机号',
                              error_messages={'unique': "此手机号已注册"}  # 指定报错的中文信息
                              )
    email_active = models.BooleanField(default=False, verbose_name='邮箱验证状态')

    class Meta:
        db_table = "dj_pro_user"  # 指明数据库中的表名叫什么
        verbose_name = "用户"  # 在admin站点中显示的名称
        verbose_name_plural = verbose_name  # 显示的复数名称

    def __str__(self):  # 打印对象时调用
        return self.username

